﻿using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Xml.Linq;
using System.Data.Common;
using Biblioteca.DataBase;
using Pms.Utils;
using SERIX.Util;
using Biblioteca.Utils;
using System.Collections.Generic;

namespace SERIX
{
    /*
     * Autor      : IT-Developer1
     * Data       : 02/04/2010 11:03:48
     * Descricao  : 
     * Alteracoes : 
     * 
     */
    public class CriteriosPesquisaTecnico : CriteriosPesquisa
    {
        public string FiltrarPor { get; set; }
        public string Orgao { get; set; }
    }

    public partial class Tecnicos : Seguranca
    {
        CriteriosPesquisaTecnico criteriosPesquisa;

        protected void Page_Load(object sender, EventArgs e)
        {
            base.OnLoad(e); 
            btnNovo.Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO); 
            InicializarCriteriosPesquisa();
            if (!RestaurarPesquisa() && !Page.IsPostBack)
            {
                SalvarPesquisa();
                Session["PagAtual"] = 1;
                Navegador1.CarregueBotoes(0);
                Pesquisar();
            }
            Navegador1.Pesquisar += new SERIX.Controles.Navegador.PesquisarDelegate(Pesquisar);
        }

        private void InicializarCriteriosPesquisa()
        {
            criteriosPesquisa = (CriteriosPesquisaTecnico)Session[Page.ToString()];
        }

        private void SalvarPesquisa()
        {
            if (criteriosPesquisa == null)
            {
                criteriosPesquisa = new CriteriosPesquisaTecnico()
                {
                    FiltroSimples = txtFiltrar.Text,
                    PaginaAtual = 1,
                    FiltrarPor = "",
                    Orgao = ""
                };
                Session[Page.ToString()] = criteriosPesquisa;
            }
            else
            {
                criteriosPesquisa.FiltroSimples = txtFiltrar.Text;
                criteriosPesquisa.PaginaAtual = 1;
                criteriosPesquisa.FiltrarPor = ddlPor.SelectedValue;
                criteriosPesquisa.Orgao = ddlOrgaos.SelectedValue;
            }
        }

        private bool RestaurarPesquisa()
        {
            if (!IsPostBack && criteriosPesquisa != null)
            {
                txtFiltrar.Text = criteriosPesquisa.FiltroSimples;
                ddlPor.SelectedValue = criteriosPesquisa.FiltrarPor;
                ddlOrgaos.DataBind();
                ddlOrgaos.Items.Insert(0, "");
                ddlOrgaos.SelectedValue = criteriosPesquisa.Orgao;
                Pesquisar();
                return true;
            }
            return false;
        }

        protected void Todos()
        {
            txtFiltrar.Text = "";
            string login = UsuAut.Login;
            lblFiltro.Text = "Filtro: Todos os Técnicos.";
            string SQL = @"SELECT IDT_TEC, MAT_TEC,IDT_TPO_CARGO,IDT_ORGAO,NOM_TEC,ENDERECO,BAIRRO,CIDADE,COD_USU,UF,CEP,COMPLEMENTO,EMAIL1, EMAIL2, TELEFONE1, TELEFONE2, IDT_ESLOC
                            FROM Serix.SRX_TECNICOS
                            ORDER BY NOM_TEC";
            QueryPaginada qy = null;
            try
            {
                qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                gridView.DataBind();
                Navegador1.CarregueBotoes(qy.QtdLinhas());
            }
            catch
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
            finally
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
            }
        }

        protected void Pesquisar()
        {
            string login = UsuAut.Login;
            QueryPaginada qy = null;
            try
            {
                //Se o filtro nao estiver vazio 
                if (txtFiltrar.Text != "" || ddlOrgaos.SelectedValue != "")
                {
                    Session["PagAtual"] = 1;
                    SetLabelFiltro();

                    List<ParametroSql> parametros = new List<ParametroSql>();
                    string SQL = @"SELECT IDT_TEC, MAT_TEC,IDT_TPO_CARGO,IDT_ORGAO,STA_TEC,NOM_TEC,ENDERECO,BAIRRO,CIDADE,COD_USU,UF,CEP,COMPLEMENTO,EMAIL,FONES 
                                    FROM Serix.SRX_TECNICOS " +
                                    GetFiltro(parametros) +
                                  " ORDER BY NOM_TEC";
                    try
                    {
                        qy = new QueryPaginada(BiblioPMS.ObterConexao(BiblioPMS.aplicacaoSNG, login, BiblioPMS.Demo), SQL, BiblioSERIX.tamPag);
                        SetParametros(parametros, qy);
                        gridView.DataSource = qy.Executar(criteriosPesquisa.PaginaAtual);
                        gridView.DataBind();
                        Navegador1.CarregueBotoes(qy.QtdLinhas());
                    }
                    catch
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                        Todos();
                    }
                    finally
                    {
                        if (qy.EstadoConexao() == ConnectionState.Open)
                            qy.FecharConexao();
                    }
                }
                else
                    //Caso o filtro esteja vazio, mostre todos
                    Todos();
            }
            catch
            //Em caso de erro, mostre todos
            {
                if (qy.EstadoConexao() == ConnectionState.Open)
                    qy.FecharConexao();
                Todos();
            }
        }

        private void SetLabelFiltro()
        {
            lblFiltro.Text = "";
            if (ddlPor.SelectedValue.ToUpper() == "MAT" && txtFiltrar.Text != "")
                lblFiltro.Text = "Filtro: Matrícula = '\'" + txtFiltrar.Text + "'\'.";
            else if (ddlPor.SelectedValue.ToUpper() == "NOME" && txtFiltrar.Text != "")
                lblFiltro.Text = "Filtro: Nome = '\'" + txtFiltrar.Text + "'\'.";

            if (ddlOrgaos.SelectedValue != "")
                lblFiltro.Text += " Órgão = '\'" + ddlOrgaos.SelectedItem.Text + "'\'.";
        }

        private void SetParametros(List<ParametroSql> parametros, QueryPaginada qy)
        {
            foreach (ParametroSql item in parametros)
            {
                qy.AdicionarParametro(item.Nome, item.Tipo, item.Valor);
            }
        }

        private string GetFiltro(List<ParametroSql> p)
        {
            string filtro = " WHERE 1=1 ";
            if (ddlPor.SelectedValue.ToUpper() == "MAT")
            {
                filtro += "AND MAT_TEC = :P_MAT ";
                p.Add(new ParametroSql() { Nome = "P_MAT", Tipo = DbType.String, Valor = txtFiltrar.Text });
            }
            else if (ddlPor.SelectedValue.ToUpper() == "NOME")
            {
                filtro += "AND UPPER(NOM_TEC) LIKE '%' || UPPER(:P_NOME) || '%' ";
                p.Add(new ParametroSql() { Nome = "P_NOME", Tipo = DbType.String, Valor = txtFiltrar.Text });
            }
            // Considerando o filtro por órgão
            if (!string.IsNullOrEmpty(ddlOrgaos.SelectedValue))
            {
                filtro += "AND IDT_ORGAO = :P_ORGAO ";
                p.Add(new ParametroSql() { Nome = "P_ORGAO", Tipo = DbType.String, Valor = ddlOrgaos.SelectedValue });
            }
            return filtro;
        }

        protected void btnNovo_Click(object sender, EventArgs e)
        {
            Response.Redirect("TecnicosManut.aspx?OP=I");
        }

        protected void btnPequisar_Click(object sender, EventArgs e)
        {
            SalvarPesquisa();
            Pesquisar();
        }

        protected void btnTodos_Click(object sender, EventArgs e)
        {
            txtFiltrar.Text = "";
            ddlPor.SelectedIndex = 0;
            ddlOrgaos.SelectedIndex = 0;
            SalvarPesquisa();

            Session["PagAtual"] = 1;
            Todos();
        }

        protected void gridView_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                string IDT = ((DbDataRecord)e.Row.DataItem)["IDT_TEC"].ToString();

                //Se tiver permissao de Manutenção
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).NavigateUrl = "TecnicosManut.aspx?OP=R&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).NavigateUrl = "TecnicosManut.aspx?OP=U&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).NavigateUrl = "TecnicosManut.aspx?OP=DATANASC_CONJUGE&idt=" + Server.UrlEncode(Criptografia.Criptografar(IDT));

                ((DropDownList)e.Row.Cells[gridView.Columns.Count - 1].Controls[1]).Attributes.Add("chave", Server.UrlEncode(Criptografia.Criptografar(IDT)));

                //SEGURANÇA
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 4].Controls[1]).Enabled = !PermissaoManut.Equals(Constantes.PERM_NEGADA);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 3].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
                ((HyperLink)e.Row.Cells[gridView.Columns.Count - 2].Controls[1]).Enabled = PermissaoManut.Equals(Constantes.PERM_MANUTENCAO);
            }
        }

        protected void ddlOpcoes_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (((DropDownList)sender).SelectedIndex == 1)
            {
                Response.Redirect("InformacoesComplementares.aspx?idt=" + ((DropDownList)sender).Attributes["chave"]);
            }
            else if (((DropDownList)sender).SelectedIndex == 2)
            {
                Response.Redirect("LotacoesTecnicos.aspx?idt=" + ((DropDownList)sender).Attributes["chave"]);
            }
        }

        protected void ddlOrgaos_PreRender(object sender, EventArgs e)
        {
            if (!IsPostBack && ddlOrgaos.Items[0].Value != "")
                ddlOrgaos.Items.Insert(0, "");
        }
    }
}
